//高阶函数
'use strict';
function a(x,y,f){
    return f(x)+f(y)
}
var A =a(-5,8,Math.abs)
console.log(A);
/* 解析
x=-5
y=8
f=Math.abs
f(x)+f(y)=Math.abs(x)+Math.abs(y)=5+8=13     //Math.abs(x)表示输出x的绝对值
return 13 */


//map
function b(x){
    return x*x
}
var c=[1,2,3,4,5]
var d=c.map(b)
console.log(d);  //1,4,9,16,25
//map()传入的参数是b，即函数对象本身
//我们调用Array的map()方法使得到一个新的函数结果
//所以，map()作为高阶函数，事实上它把运算规则抽象了，因此，我们不但可以计算简单的f(x)=x2，还可以计算任意复杂的函数，
//比如，把Array的所有数字转为字符串：
var e=[1,2,5,8,65]
var e1=e.map(String)
console.log(e1);   //["1", "2", "5", "8", "65"]


//reduce
//其效果为[x1,x2,x3,x4]reduce.(f)=f(f(f(x1,x2),x3),x4)
////使用reduce求和
var w=[1,2,3,4,5,6,7]
var w1=w.reduce(function(x,y){
    return x+y
})
var w2=w.reduce(function(x,y){
    return x*10+y
})
console.log(w1);  //输出28
console.log(w2);  //连贯输出1234567

/////测试
